package com.woniuxy.yoga.product.web.controller;

import cn.hutool.core.bean.BeanUtil;
import com.woniuxy.yoga.commons.core.model.PageInfo;
import com.woniuxy.yoga.commons.core.model.Result;
import com.woniuxy.yoga.product.dao.model.Product;
import com.woniuxy.yoga.product.model.dto.ProductByIdDTO;
import com.woniuxy.yoga.product.model.dto.ProductDTO;
import com.woniuxy.yoga.product.model.form.AddProductForm;
import com.woniuxy.yoga.product.model.form.QueryProductForm;
import com.woniuxy.yoga.product.model.param.AddProductParam;
import com.woniuxy.yoga.product.model.param.QueryProductParam;
import com.woniuxy.yoga.product.service.service.ProductService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * <p>
 * 产品表 前端控制器
 * </p>
 *
 * @author 韦用文,刘存益,郎腾霄
 * @since 2023年11月28日
 */
@RestController
@RequestMapping("/product")
@Api(tags = "产品服务相关业务接口")
@Validated
public class ProductController {

    @Autowired
    private ProductService productService;

    /**
     * 用户查询可用产品
     * @return
     */
    @GetMapping("/queryNormalProduct.us")
    @ApiOperation("用户查询可用产品接口")
    public Result<List<ProductDTO>> queryNormalProduct(){
        List<ProductDTO> products = productService.queryNormalProduct();
        return Result.getListResult(ProductDTO.class).setMessage("用户查询可用产品信息成功").setData(products);
    }

    /**
     * 新增产品
     * @param addProductForm
     * @return
     */
    @PostMapping("/addProduct.bu")
    @ApiOperation("新增产品接口")
    public Result<?> addProduct(@Valid @RequestBody AddProductForm addProductForm){
        productService.addProduct(BeanUtil.toBean(addProductForm, AddProductParam.class));
        return Result.getResult().setMessage("新增产品成功");
    }

    /**
     * 上架产品
     * @param productId
     * @return
     */
    @GetMapping("/normalProduct/{productId}.bu")
    @ApiOperation("上架产品接口")
    @ApiImplicitParam(name = "productId",value = "产品ID")
    public Result<?> normalProduct(@Valid @NotNull @PathVariable("productId") Integer productId){
        productService.normalProduct(productId);
        return Result.getResult().setMessage("上架产品成功");
    }

    /**
     * 下架产品
     * @param productId
     * @return
     */
    @GetMapping("/disableProduct/{productId}.bu")
    @ApiOperation("下架产品接口")
    @ApiImplicitParam(name = "productId",value = "产品ID")
    public Result<?> disableProduct(@Valid @NotNull @PathVariable("productId") Integer productId){
        productService.disableProduct(productId);
        return Result.getResult().setMessage("下架产品成功");
    }

    /**
     * 删除产品
     * @param productId
     * @return
     */
    @GetMapping("/deleteProduct/{productId}.bu")
    @ApiOperation("删除产品接口")
    @ApiImplicitParam(name = "productId",value = "产品ID")
    public Result<?> deleteProduct(@Valid @NotNull @PathVariable("productId") Integer productId){
        productService.deleteProduct(productId);
        return Result.getResult().setMessage("删除产品成功");
    }

    /**
     * 商家查询自己的所有产品
     * @param queryProductForm
     * @return
     */
    @PostMapping("/queryProduct.bu")
    @ApiOperation("商家查询自己的所有产品接口")
    public Result<PageInfo> queryProduct(@Valid @RequestBody QueryProductForm queryProductForm){
        PageInfo pageInfo = productService.queryProduct(BeanUtil.toBean(queryProductForm, QueryProductParam.class));
        return Result.getResult(PageInfo.class).setMessage("商家查询自己的所有产品成功").setData(pageInfo);
    }

    /**
     * 查询产品
     * @param productId
     * @return
     */
    @GetMapping("/getById/{productId}")
    @ApiOperation("产品ID查询产品接口")
    @ApiImplicitParam(name = "productId",value = "产品ID")
    public Result<ProductByIdDTO> getById(@Valid @NotNull(message = "产品ID不能为空") @PathVariable("productId") Integer productId){
        //获取数据
        Product product = productService.getById(productId);
        //对象转换
        ProductByIdDTO productByIdDTO = BeanUtil.toBean(product, ProductByIdDTO.class);
        //返回数据
        return Result.getResult(ProductByIdDTO.class).setMessage("根据产品ID查询产品成功").setData(productByIdDTO);
    }

    /**
     * 批量删除普通课程
     * @param storeId
     * @return
     */
    @GetMapping("/removeProduct/{storeId}")
    @ApiOperation("批量删除普通课程接口")
    @ApiImplicitParam(name = "storeId",value = "门店ID")
    public Result<?> removeProduct(@Valid @NotNull(message = "门店ID不能为空") @PathVariable("storeId") Integer storeId){
        productService.removeProduct(storeId);
        return Result.getResult().setMessage("批量删除普通课程成功");
    }

}

